﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Dominio;
using Log4Net;

namespace HotelGUI
{
    public partial class ABMComodidades : Form
    {
        ISistema sistema =  Sistema.getInstance();
        String LlenarCamposObligatorios = "Debe llenar todos los datos.";
        ILog log = FactoryLogs.getLogInstance();

        public ABMComodidades()
        {
            InitializeComponent();
        }

        private void ABMComodidades_Load(object sender, EventArgs e)
        {
            btnAgregar.Enabled = true;
            btnModificar.Enabled = false;

            List<String[]> comods = sistema.traerComodidades(false);
            foreach (String[] com in comods)
            {
                int n = -10;
                try
                {
                    n = dgvComodidades.Rows.Add();
                    dgvComodidades.Rows[n].Cells["idComodidad"].Value = com[0];
                    dgvComodidades.Rows[n].Cells["Comodidad"].Value = com[1];
                    dgvComodidades.Rows[n].Cells["Descripción"].Value = com[2];
                    dgvComodidades.Rows[n].Cells["Costo"].Value = com[3];
                    dgvComodidades.Rows[n].Cells["Activa"].Value = com[4];

                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, "Error Cargando las Comodidades. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    if (n >= 0)
                        try
                        {
                            dgvComodidades.Rows.RemoveAt(n);
                        }
                        catch (Exception ex1)
                        {
                            MessageBox.Show(this, ex1.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                }
            }

        }

        private void limpiarForm()
        {
            txtComodidad.Text = "";
            mtCosto.Text = "";
            txtDescripción.Text = "";
            cbEstado.Checked = false;
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            if (txtComodidad.Text != "" && txtDescripción.Text != "" && mtCosto.Text != "")
            {
                int n = -10;
                char estado;
                try
                {
                    if (cbEstado.Checked)
                        estado = 'N';
                    else
                        estado = 'S';

                    float cost = float.Parse(mtCosto.Text.Trim());

                    int num = sistema.altaComodidad(txtComodidad.Text.Trim(), txtDescripción.Text.Trim(), cost, estado);
                    lblIdComodidad.Text = num.ToString();
                    n = dgvComodidades.Rows.Add();
                    dgvComodidades.Rows[n].Cells["idComodidad"].Value = lblIdComodidad.Text.Trim();
                    dgvComodidades.Rows[n].Cells["Comodidad"].Value = txtComodidad.Text.Trim();
                    dgvComodidades.Rows[n].Cells["Costo"].Value = mtCosto.Text.Trim();
                    dgvComodidades.Rows[n].Cells["Descripción"].Value = txtDescripción.Text.Trim();
                    dgvComodidades.Rows[n].Cells["Activa"].Value = estado.ToString();
                    log.info(sistema.obtenerIdUsuarioLogueado(), "Creacion de nueva Comodidad: " + txtComodidad.Text.Trim());
                    dgvComodidades.Refresh();
                    limpiarForm();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    try
                    {
                        dgvComodidades.Rows.RemoveAt(n);
                    }
                    catch (Exception ex2)
                    {
                        MessageBox.Show(this, ex2.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            else
                MessageBox.Show(this, LlenarCamposObligatorios, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (txtComodidad.Text != "" && txtDescripción.Text != "")
            {
                try
                {
                    int numFila = 0;
                    while (dgvComodidades.RowCount > numFila && lblIdComodidad.Text.Trim() != dgvComodidades.Rows[numFila].Cells["idComodidad"].Value.ToString())
                    {
                        numFila++;
                    }
                    if (numFila != dgvComodidades.RowCount)
                    {
                        char estado;
                        if (cbEstado.Checked)
                            estado = 'N';
                        else
                            estado = 'S';
                        mtCosto.TextMaskFormat = MaskFormat.ExcludePromptAndLiterals;
                        sistema.modificarComodidad(int.Parse(lblIdComodidad.Text.Trim()),txtComodidad.Text.Trim(),txtDescripción.Text.Trim(), float.Parse(mtCosto.Text.Trim()), estado);
                        dgvComodidades.Rows[numFila].Cells["Comodidad"].Value = txtComodidad.Text.Trim();
                        dgvComodidades.Rows[numFila].Cells["Descripción"].Value = txtDescripción.Text.Trim();
                        dgvComodidades.Rows[numFila].Cells["Costo"].Value = mtCosto.Text.Trim();
                        dgvComodidades.Rows[numFila].Cells["Activa"].Value = estado.ToString();
                        log.info(sistema.obtenerIdUsuarioLogueado(), "Modificacion de Comodidad: " + txtComodidad.Text.Trim()); 
                        btnAgregar.Enabled = true;
                        btnModificar.Enabled = false;
                        limpiarForm();
                    }
                }

                catch (Exception ex)
                {
                    MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
                MessageBox.Show(this, LlenarCamposObligatorios, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            limpiarForm();
            btnAgregar.Enabled = true;
            btnModificar.Enabled = false;
        }

        private void dgvComodidades_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == -1)
            {
                return;
            }
            txtComodidad.Text = dgvComodidades.Rows[e.RowIndex].Cells["Comodidad"].Value.ToString();
            txtDescripción.Text = dgvComodidades.Rows[e.RowIndex].Cells["Descripción"].Value.ToString();
            mtCosto.Text = float.Parse(dgvComodidades.Rows[e.RowIndex].Cells["Costo"].Value.ToString()).ToString();
            mtCosto.Text = mtCosto.Text.TrimEnd();
            if (dgvComodidades.Rows[e.RowIndex].Cells["Activa"].Value.ToString() == "N")
                cbEstado.Checked = true;
            else
                cbEstado.Checked = false;
            lblIdComodidad.Text = dgvComodidades.Rows[e.RowIndex].Cells["idComodidad"].Value.ToString();

            btnAgregar.Enabled = false;
            btnModificar.Enabled = true;
        }


      
    }
}
